#ifndef DICT_PRODUCER_H
#define DICT_PRODUCER_H

#include <vector>
#include <string>
#include <map>
#include <set>
#include <unordered_set>
#include <utility>  //pair
#include <fstream>  // 添加这行来支持文件流操作

#include "cppjieba/Jieba.hpp"

#include "SplitTool.h"



class DictProducer{
public:
    DictProducer(SplitTool* cuttor);
    ~DictProducer();
    
    // 存储函数声明（新增文件路径常量）
    static constexpr const char* EN_DICT_PATH = "../data/en_vec.dat";
    static constexpr const char* CN_DICT_PATH = "../data/cn_vec.dat";
    static constexpr const char* EN_INDEX_PATH = "../data/en_index.dat";
    static constexpr const char* CN_INDEX_PATH = "../data/cn_index.dat";
    void storeEN(const std::string& filepath);
    void storeCN(const std::string& filepath);
    void storeIndexEN(const std::string& filepath);
    void storeIndexCN(const std::string& filepath);


//处理英文语料
public:
    //处理英文语料的函数
    void dealEN(const std::string &path);//构建英文词典
    void dealLine(std::string &line);
public:
    //处理英文语料的数据成员
    //map 统计单词 和 该单词的词频， 元素类型为<string , int>
    std::map<std::string, int> _dictEN;

    //map->vector
    //vector构建map
    std::vector<std::pair<std::string,int>> _vecEN;    
    std::map<std::string,std::set<int>> _indexEN;      

    



//处理中文语料
public:
    //处理中文语料的函数
    void dealCN(const std::string &path);//构建中文词典
    std::string dealLine_Chinese(std::string &line);
    void loadStopWords(const std::string &filePath);
    
public:
    //map容器
    std::map<std::string, int> _dictCN;    //词典库
    std::map<std::string, std::set<int>> _index;  //词典索引库
    SplitTool* _cuttor;                    //分词工具
    std::unordered_set<std::string> _stopWords;  //停用词集合


    //map<>容器 转为 vector<pair()>容器
    std::vector<std::pair<std::string,int>> _vecCN;    //词典库 vector[n]代表一个词；元素是pair<string,int>--代表一个单词出现的频率。
    std::map<std::string,std::set<int>> _indexCN;      //词典索引库 string是查找的一个词,set是包含这个词的 单词的下标集合
    //SplitTool* _cuttor;                              //cppjieba
};

#endif
